home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / kcl.lha / h / fasl.h < prev    next >
C/C++ Source or Header  |  1987-06-04  |  7KB  |  303 lines

  1. /*
  2. (C) Copyright Taiichi Yuasa and Masami Hagiya, 1984.  All rights reserved.
  3. */
  4.  
  5. #ifdef DGUX
  6. #include <stdio.h>
  7. #endif
  8.  
  9. /*
  10.     fasl loader parameter definition
  11. */
  12. #define FAS_HEADER_LEN        3    /* header word length */
  13. #define FAS_HEADER_BLEN        6    /* header byte length */
  14. #define FAS_DATA_LEN        7    /* data block length */
  15. #define FAS_DATA_BLEN        14    /* data block byte length */
  16. #define MAX_TITLE        32    /* title max length */
  17. #define MAX_SYMBOL        32    /* symbol max length */
  18. #define MAX_SYS_PART        7    /* max system partition no */
  19. #define EX_RELOC        017    /* extended relocation */
  20. #define BIT_RELOC        016    /* extended bit relocation */
  21.  
  22. /* Define the offsets of the various words in the FASL blocks. Certain
  23.    parts of different ob blocks are quite similar. This includes the
  24.    block header, the name descriptors and the relocation entries. These
  25.    are defined as follows:                    */
  26.  
  27. /* block header */
  28.  
  29. struct fas_hdr {
  30.      short    hdr_typ;    /* block type */
  31.     short    hdr_num;    /* block number */
  32.     short    hdr_len;    /* block length including header */
  33.     };
  34.  
  35. /* name descriptor */
  36.  
  37. struct fas_name {
  38.     short    name_len;    /* name length */
  39.     short    name_ptr;    /* byte offset */
  40.     };
  41.  
  42. /* standard symbol or dictionary entry */
  43.  
  44. struct fas_std {
  45.     short    std_disp;    /* displacement */
  46.     short    std_reloc;    /* relocation */
  47.     };
  48.  
  49. /* extended symbol entry */
  50.  
  51. struct fas_sym {
  52.     short    sym_base;    /* relocation base */
  53.     short    sym_reloc;    /* relocation */
  54.     long    sym_disp;    /* displacement */
  55.     };
  56.  
  57. /* extended dictionary entry */
  58.  
  59. struct fas_dict {
  60.     short    dict_data;    /* word offset */
  61.     short    dict_reloc;    /* relocation */
  62.     short    dict_base;    /* relocation base */
  63.     };
  64.  
  65. /* bit relocation entry */
  66.  
  67. struct fas_bit {
  68.     short    bit_data;    /* word offset */
  69.     short    bit_reloc;    /* relocation */
  70.     short    bit_base;    /* relocation base */
  71.     short    bit_fields;    /* bit field description */
  72.     };
  73.  
  74. /* data block */
  75.  
  76. struct fas_data {
  77.     short    data_words;    /* word count */
  78.     long    data_repeat;    /* repeat count */
  79.     short    data_base;    /* relocation base */
  80.     short    data_reloc;    /* relocation operation */
  81.     long    data_disp;    /* data displacement */
  82.     };
  83.  
  84. /* title block */
  85.  
  86. struct fas_titl {
  87.     short    titl_rev;    /* revision */
  88.     short    titl_len;    /* title length */
  89.     short    titl_ptr;    /* byte offset */
  90.     };
  91.  
  92. /* end block */
  93.  
  94. struct fas_end {
  95.     short    end_base;    /* relocation base */
  96.     short    end_reloc;    /* relocation */
  97.     long    end_start;    /* start address */
  98.     };
  99.  
  100. /* unlabelled common block */
  101.  
  102. struct fas_uncom {
  103.     long    uncom_len;    /* length */
  104.     short    uncom_reloc;    /* relocation */
  105.     };
  106.  
  107. /* external symbols block */
  108.  
  109. struct fas_ext {
  110.     short    ext_num;    /* number of symbols */
  111.     };
  112.  
  113. /* entry and local symbols block */
  114.  
  115. struct fas_ent {
  116.     short    ent_count;    /* number of entries */
  117.     };
  118.  
  119. /* entry descriptor */
  120.  
  121. struct fas_entd {
  122.     short    entd_len;    /* length */
  123.     short    entd_ptr;    /* name pointer */
  124.     short    entd_base;    /* base */
  125.     short    entd_reloc;    /* relocation */
  126.     long    entd_disp;    /* displacement */
  127.     };
  128.  
  129. /* partition difinition block */
  130.  
  131. struct fas_pat {
  132.     short    pat_count;    /* number of patitions */
  133.     };
  134.  
  135. /* partition descriptor */
  136.  
  137. struct fas_patd {
  138.     short    patd_flag;    /* various flags */
  139.     short    patd_nlen;    /* partition name length */
  140.     short    patd_nptr;    /* partition name pointer */
  141.     long    patd_len;    /* partition length */
  142.     };
  143.  
  144. /* revision block */
  145.  
  146. struct fas_rev {
  147.     short    rev_lrev;    /* link revision number */
  148.     short    rev_count;    /* number of revision descriptors */
  149.     };
  150.  
  151. /* revision descriptor */
  152.  
  153. struct fas_revd {
  154.     short    revd_btyp;    /* block type */
  155.     short    revd_brev;    /* block revision */
  156.     };
  157.  
  158. /* module revision block */
  159.  
  160. struct fas_mrev {
  161.     long    mrev_rev;    /* module revision */
  162.     };
  163.  
  164. /* filler block */
  165.  
  166. struct fas_fil {
  167.     short    fil_data;    /* data filied */
  168.     };
  169.  
  170. /* alignment block */
  171.  
  172. struct fas_aln {
  173.     short    aln_base;    /* relocation base */
  174.     short    aln_power;    /* alignment factor */
  175.     };
  176.  
  177. /*
  178.     partition table definition
  179. */
  180.  
  181. /*
  182.     define global variables for FASL loader
  183. */
  184.  
  185. struct part_table {
  186.     short    part_no;    /* partition number */
  187.     long    part_len;    /* partition length */
  188.     long    part_addr;    /* base address */
  189.     short    part_align;    /* alignment */
  190.     short    part_global;    /* global or local flag */
  191.     short    part_symbol;    /* partition or ext. symbol flag */
  192.     char    part_name[MAX_SYMBOL + 1];    /* partition name */
  193.     };
  194.  
  195. /*
  196.     block type defnition
  197. */
  198. enum block_types {
  199.     DATA_BLOCK = 0,    /* data block */
  200.     TITL_BLOCK,    /* title block */
  201.     END_BLOCK,    /* end block */
  202.     UNCOM_BLOCK,    /* unlabeled common */
  203.     EXT_BLOCK,    /* external */
  204.     ENT_BLOCK,    /* entry */
  205.     LOCAL_BLOCK,    /* local entry, ignored */
  206.     LIBS_BLOCK,    /* library start block, unexpected */
  207.     AIB_BLOCK,    /* address infoamtion block, unexpected */
  208.     SYS1_BLOCK,    /* reserved, unexpected */
  209.     TASK_BLOCK,    /* unexpected */
  210.     SYS2_BLOCK,    /* reserved, unexpected */
  211.     COMM_BLOCK,    /* labeled common, unexpected */
  212.     SYS3_BLOCK,    /* reserved, unexpected */
  213.     DEBS_BLOCK,    /* debugger symbol, ignored */
  214.     DEBL_BLOCK,    /* debugger line, ignored */
  215.     LTITL_BLOCK,    /* line title, ignored */
  216.     LIBE_BLOCK,    /* library end, unexpected */
  217.     SYS4_BLOCK,    /* reserved, unexpected */
  218.     PAT_BLOCK,    /* partition block */
  219.     SYS5_BLOCK,    /* reserved, unexpected */
  220.     SYS6_BLOCK,    /* reserved, unexpected */
  221.     REV_BLOCK,    /* revision block */
  222.     FIL_BLOCK,    /* filler block unexpected */
  223.     MREV_BLOCK,    /* module revision block */
  224.     ALN_BLOCK    /* allinment block */
  225.     };
  226.  
  227. /*
  228.     for easy reference
  229. */
  230. typedef struct fas_hdr        *FAS_HDR_P;
  231. typedef struct fas_name        *FAS_NAME_P;
  232. typedef struct fas_std        *FAS_STD_P;
  233. typedef struct fas_sym        *FAS_SYM_P;
  234. typedef struct fas_dict        *FAS_DICT_P;
  235. typedef struct fas_bit        *FAS_BIT_P;
  236. typedef struct fas_data        *FAS_DATA_P;
  237. typedef struct fas_titl        *FAS_TITL_P;
  238. typedef struct fas_end        *FAS_END_P;
  239. typedef struct fas_uncom    *FAS_UNCOM_P;
  240. typedef struct fas_ext        *FAS_EXT_P;
  241. typedef struct fas_ent        *FAS_ENT_P;
  242. typedef struct fas_entd        *FAS_ENTD_P;
  243. typedef struct fas_pat        *FAS_PAT_P;
  244. typedef struct fas_patd        *FAS_PATD_P;
  245. typedef struct fas_rev        *FAS_REV_P;
  246. typedef struct fas_revd        *FAS_REVD_P;
  247. typedef struct fas_mrev        *FAS_MREV_P;
  248. typedef struct fas_fil        *FAS_FIL_P;
  249. typedef struct fas_aln        *FAS_ALN_P;
  250.  
  251. typedef struct part_table    *PART_TABLE_P;
  252.  
  253. /*
  254.     parameter definition
  255. */
  256.  
  257. #define TRUE        1
  258. #define FALSE        0
  259. #define FAS_BUFF_LEN    2048
  260. #define FAS_MAP_SIZE    1024
  261.  
  262. #define R_MASK        0177400    /* mask right byte */
  263. #define L_MASK        0000377    /* mask left byte */
  264. #define BLOCK_TYPE    0000377 /* block type */
  265. #define OVER_BIT    0004000 /* suppress overwrite message */
  266. #define RELOC_OP    0000017    /* relocation operation */
  267. #define RELOC_OP_EX    0177760    /* extended relocation operation */
  268. #define PAT_ALN        0000740 /* partition alinment power */
  269. #define PAT_NREL    0000010 /* long or short NREL */
  270. #define PAT_BASE    0000004 /* default or common base */
  271. #define BIT_START    0177400 /* bit field start position */
  272. #define BIT_LEN        0000377 /* bit field length */
  273.  
  274. #define PAT_ALN_S    5    /* partition alignment shift width */
  275. #define PAT_BASE_S    2    /* partition base shift width */
  276. #define RELOC_OP_S    4    /* extended relocation shift width */
  277. #define BIT_FIELD_S    10    /* bit field start pos shift width */
  278.  
  279. #define FAS_TABLES_IN_REC    \
  280.             (FAS_BUFF_LEN / sizeof(struct part_table))
  281.  
  282. #define FAS_ADDRS_IN_REC    (FAS_BUFF_LEN / sizeof(int))
  283.  
  284. #ifdef DGUX
  285.  
  286. #define fasl_rpos() fseek(faslin, 0, 0)
  287. #define fasl_skip(count) fseek(faslin, (count), 0)
  288.  
  289. #define FAS_HSIZE        8
  290. #define SYMBOL_TABLE_MAX    24
  291.  
  292. struct sym_header {
  293.     short    count;
  294.     short    npage;
  295. };
  296.  
  297. struct sym_entry {
  298.     int    value;
  299.     short    blength;
  300. };
  301.  
  302. #endif
  303.